import { createInstance, KeyPrefix } from 'i18next'; // 导入 i18next 的 createInstance 函数和 KeyPrefix 类型
import resourcesToBackend from 'i18next-resources-to-backend'; // 导入 i18next-resources-to-backend 插件
import { initReactI18next } from 'react-i18next/initReactI18next'; // 导入 react-i18next 的 initReactI18next 插件
import { getOptions } from './index'; // 导入配置文件

// 定义一个类型，用于描述翻译选项
type TranslationOptions = {
	keyPrefix: string; // 翻译选项中的 keyPrefix 属性
};

// 我们在这里没有使用 i18next 单例，而是在每次 useTranslation 调用时创建一个新实例，因为在编译过程中，所有东西似乎都是并行执行的。拥有单独的实例将保持翻译的一致性。

// 初始化 i18next 实例的函数
const initI18next = async (lng: string, ns: string) => {
	const i18nInstance = createInstance(); // 创建一个新的 i18next 实例
	await i18nInstance
		.use(initReactI18next) // 使用 react-i18next 插件
		.use(resourcesToBackend((language: string, namespace: string) => import(`./locales/${language}/${namespace}.json`))) // 使用 resourcesToBackend 插件
		.init({ ...getOptions(lng, ns) }); // 初始化 i18next 实例
	return i18nInstance; // 返回初始化后的实例
};

// 自定义 useTranslation 钩子
export async function useTranslation(lng: string, ns: string, options?: TranslationOptions) {
	const i18nextInstance = await initI18next(lng, ns); // 初始化 i18next 实例
	return {
		t: i18nextInstance.getFixedT(lng, Array.isArray(ns) ? ns[0] : ns, options?.keyPrefix), // 获取翻译函数
		i18n: i18nextInstance // 返回 i18next 实例
	};
}
